package com.hyt.it.ogt.kq.service.gov.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hyt.it.ogt.kq.service.gov.model.dto.ExportPlaceRoomDTO;
import com.hyt.it.ogt.kq.service.gov.model.dto.TaskTimeRoomArrangeDTO;
import com.hyt.it.ogt.kq.service.gov.model.entity.TaskPlace;
import com.hyt.it.ogt.kq.service.gov.model.vo.TaskRoomQueryResultVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.TaskTimeRoomArrangeOrNoVO;
import com.hyt.it.ogt.kq.service.gov.model.entity.TaskRoom;
import com.hyt.it.ogt.kq.service.gov.model.json.examsys.obt.RoomInfoResult;
import com.hyt.it.ogt.kq.service.gov.model.vo.TaskRoomTotalVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.arrange.ArrangeCount;
import com.hyt.it.ogt.kq.service.gov.model.vo.arrange.ArrangeRoomVO;
import com.hyt.it.ogt.kq.service.gov.model.xml.examsys.gce.RegisterInfoGceResult;
import com.hyt.it.ogt.kq.service.gov.model.xml.examsys.obt.RegisterInfoObtResult;
import com.hyt.model.PageParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 任务考场表 Mapper 接口
 * </p>
 *
 * @author huangyh
 * @since 2021-04-12
 */
public interface TaskRoomMapper extends BaseMapper<TaskRoom> {

    /**
     * 查询考场，绑定批次和未绑定批次
     * @param taskId
     * @param timeId
     * @return
     */
    List<TaskTimeRoomArrangeOrNoVO> selectTimeRoomArrangeOrNo(@Param("param") TaskTimeRoomArrangeDTO param);

    /**
     * 绑定考场里查询用
     * @return
     */
    List<TaskTimeRoomArrangeOrNoVO> selectTimeRoomByTaskIdAndTimeId(@Param("taskId") String taskId,
                                                                    @Param("timeId") String timeId,
                                                                    @Param("roomIds") List<String> roomIds);

    /**
     * 查询考场，绑定批次和未绑定批次
     * @param param
     * @param param
     * @return
     */
    List<TaskTimeRoomArrangeOrNoVO>selectTimeRoomArrangeOrNoV2(@Param("param") TaskTimeRoomArrangeDTO param);

    /**
     * 查询考场，绑定批次和未绑定批次 -- 未选择
     * @param param
     * @param param
     * @return
     */
    List<TaskTimeRoomArrangeOrNoVO>selectTimeRoomArrangeNoSelected(@Param("param") TaskTimeRoomArrangeDTO param);

    /**
     * 查询已经选择了的考场ids
     * @param taskId
     * @param timeId
     * @return
     */
    List<String> selectTimeRoomIdSelected(@Param("taskId") String taskId,@Param("timeId") String timeId);

    /**
     * 查询未绑定批次的考场
     * @param taskId
     * @param timeId
     * @return
     */
    List<TaskRoom> selectRoomNoTime(String taskId,String timeId);

    /**
     * 查询考场
     * @param taskId
     * @param timeId
     * @param roomIdList
     * @return
     */
    List<TaskRoom> selectTaskRoomByRoomIds(String taskId,String timeId,@Param("roomIdList") List<String> roomIdList);

    /**
     * 查询任务考场
     * @param pageParam
     * @param taskId
     * @return
     */
    Page<TaskRoomQueryResultVO> selectTaskRoomByTaskId(Page<TaskRoomQueryResultVO> pageParam, String taskId);

    /**
     * 查询统计
     * @param taskId
     * @return
     */
    TaskRoomTotalVO selectTaskRoomTotalByTaskId(String taskId);

    /**
     * 批量删除
     * @param taskId
     * @param roomIds
     * @return
     */
    int deleteTaskRoomByIds(String taskId,String roomIds);

    /**
     * 根据考试任务编号和考场编号获取任务考场
     * @param taskCode
     * @param code
     * @return
     */
    TaskRoom getByTaskCodeAndCode(String taskCode, String code);

    /**
     * 根据考试任务编号和考场编号查询考场是否存在
     * @param taskCode 考试任务编号
     * @param code 考场编号
     * @return true：考场存在，false：考场不存在
     */
    Boolean existByTaskCodeAndCode(String taskCode, String code);

    /**
     * 获取注册考场信息(GCE)
     * @param taskCode 考试任务编号
     * @param code 考场编号
     * @return 注册考场信息
     */
    RegisterInfoGceResult getGceRegisterRoomInfo(String taskCode, String code);

    /**
     * 获取注册考场信息(OBT)
     * @param taskCode 考试任务编号
     * @param code 考场编号
     * @return 注册考场信息
     */
    RegisterInfoObtResult getObtRegisterRoomInfo(String taskCode, String code);

    /**
     * 获取考场信息返回结果
     * @param taskCode 考试任务编号
     * @param placeCode 考点编号
     * @return 考场信息返回结果
     */
    List<RoomInfoResult> getRoomInfoResult(String taskCode, String placeCode);

    /**
     * 根据考试任务编号、考场编号 获取考场机位数
     * @param taskCode 考试任务编号
     * @param roomCode 考场编号
     * @return 考场机位数
     */
    Integer getSeatNumberByCode(String taskCode, String roomCode);

    /**
     * 通过考试任务编号、考场编号更新封场状态
     * @param taskCode 考试任务编号
     * @param roomCode 考场编号
     */
    void updateClosureByCode(String taskCode, String roomCode);

    List<ArrangeRoomVO> getAreaArrangeRoomList(String taskId, String province);

    List<ExportPlaceRoomDTO> getExportRoomList(String taskId);

    ArrangeCount countRoom(String taskId);

    List<TaskPlace> getTaskPlace(String taskId, int arrangeState);
}
